package com.zzs.common.core.util;

import cn.hutool.core.lang.Snowflake;

/**
 * 雪花 ID 生成工具类，基于 Twitter Snowflake 算法生成全局唯一 ID。
 * 该工具类确保 ID 具有时间有序性，适用于分布式环境下的唯一标识生成。
 *
 * <p>特点：
 * <ul>
 *     <li>线程安全，保证高并发场景下的唯一性</li>
 *     <li>生成 64 位长整型 ID，避免数据库主键冲突</li>
 *     <li>使用 {@link Snowflake} 进行 ID 生成</li>
 * </ul>
 * </p>
 * @date 2025/03/17
 * @author zzs
 */
public final class SnowflakeUtil {
    /**
     * 雪花 ID 生成器实例，工作节点 ID 和数据中心 ID 设为 1。
     * 实际使用时，可根据部署环境调整这两个参数，避免 ID 冲突。
     */
    private static final Snowflake SNOWFLAKE = new Snowflake(1, 1);

    /**
     * 私有构造方法，防止实例化该工具类。
     */
    private SnowflakeUtil() {}

    /**
     * 生成下一个唯一 ID。
     *
     * @return 64 位长整型唯一 ID
     */
    public static long nextId() {
        return SNOWFLAKE.nextId();
    }

    /**
     * 解析雪花 ID 获取其对应的时间戳（毫秒级）。
     * @param id 雪花 ID
     * @return 生成该 ID 的时间戳（毫秒）
     */
    public static long getTimestampFromId(long id) {
        return SNOWFLAKE.getGenerateDateTime(id);
    }

}
